-
Notifications
You must be signed in to change notification settings - Fork 1.1k
[Chat] Refactor chat architecture: Extract shared infrastructure into a core chat service #10983
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughCentralizes chat infrastructure into a new core ChatService with observable thread/window state and public types; refactors the chat plugin to delegate to core services; introduces ML agent routing abstractions with AG‑UI fallback; removes several chart visualization error-handling modules and updates numerous tests and integrations. Changes
Sequence DiagramsequenceDiagram
actor Plugin as Chat Plugin
participant Core as CoreSystem
participant ChatSvc as ChatService (core)
participant Impl as Plugin Implementation
participant MLRouter as MLAgentRouter / AG-UI
Note over Core,ChatSvc: Setup & Start
Plugin->>Core: setup(core)
Core->>ChatSvc: instantiate ChatService
Core->>ChatSvc: start()
ChatSvc-->>Core: ChatServiceStart (public contract)
Note over Plugin,Impl: Runtime messaging flow
Plugin->>ChatSvc: sendMessage(content, messages)
alt Implementation registered
ChatSvc->>Impl: sendMessage(content, messages)
Impl-->>ChatSvc: { observable, userMessage }
ChatSvc-->>Plugin: resolve with userMessage and observable
else No implementation
ChatSvc-->>Plugin: reject "Chat plugin not enabled"
end
Note over ChatSvc,MLRouter: Server-side agent routing (when triggering agent)
ChatSvc->>MLRouter: forward request (includes dataSourceId)
alt ML router available
MLRouter-->>ChatSvc: streaming or JSON response
else Fallback
ChatSvc->>MLRouter: forwardToAgUI proxy
MLRouter-->>ChatSvc: streaming SSE response
end
Note over Core,ChatSvc: Window state
Plugin->>ChatSvc: setWindowState({isWindowOpen:true})
ChatSvc->>ChatSvc: update windowState$ -> emit
ChatSvc->>Plugin: invoke onWindowOpen callbacks
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🪛 YAMLlint (1.37.1)changelogs/fragments/10983.yml[error] 2-2: syntax error: expected , but found '' (syntax) ⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (67)
Comment |
❌ Empty Changelog SectionThe Changelog section in your PR description is empty. Please add a valid changelog entry or entries. If you did add a changelog entry, check to make sure that it was not accidentally included inside the comment block in the Changelog section. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #10983 +/- ##
==========================================
- Coverage 60.79% 60.77% -0.02%
==========================================
Files 4531 4537 +6
Lines 122262 122381 +119
Branches 20501 20535 +34
==========================================
+ Hits 74325 74376 +51
- Misses 42695 42748 +53
- Partials 5242 5257 +15
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
2ed2cbd to
79000d0
Compare
| ], | ||
| "requiredBundles": ["opensearchDashboardsReact", "opensearchDashboardsUtils", "dashboard"], | ||
| "optionalPlugins": ["home", "share", "chat", "contextProvider", "datasetManagement"], | ||
| "requiredBundles": ["opensearchDashboardsReact", "opensearchDashboardsUtils", "dashboard", "dataSource"], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems dataSource isn't being used in the explore plugin. Can we remove this dependency?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
removed
79000d0 to
12b745b
Compare
Signed-off-by: Anan Zhuang <[email protected]>
c9d0b03 to
7c8fc22
Compare
❌ Empty Changelog SectionThe Changelog section in your PR description is empty. Please add a valid changelog entry or entries. If you did add a changelog entry, check to make sure that it was not accidentally included inside the comment block in the Changelog section. |
❌ Empty Changelog SectionThe Changelog section in your PR description is empty. Please add a valid changelog entry or entries. If you did add a changelog entry, check to make sure that it was not accidentally included inside the comment block in the Changelog section. |
1 similar comment
❌ Empty Changelog SectionThe Changelog section in your PR description is empty. Please add a valid changelog entry or entries. If you did add a changelog entry, check to make sure that it was not accidentally included inside the comment block in the Changelog section. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
🧹 Nitpick comments (20)
src/plugins/chat/public/plugin.test.ts (1)
38-47: Tests align with core-driven chat enablement; consider tightening core mocksThe updated tests correctly:
- Model investigation capabilities via
application.capabilities.investigation.agenticFeaturesEnabled.- Assert that
ChatPlugin.startalways constructsChatServicewith(core.uiSettings, core.chat)and registers header nav controls across config variants, pushing enablement semantics into the core chat service.One optional improvement: to catch future usages of
uiSettings/chatinChatPlugin.startearlier in tests, you could seed minimal stubs onmockCoreStartinstead of leaving themundefined, e.g.:- mockCoreStart = { - application: { + mockCoreStart = { + uiSettings: {} as any, + chat: {} as any, + application: { currentAppId$: mockCurrentAppId$, capabilities: { investigation: { agenticFeaturesEnabled: true, }, }, }, chrome: {This keeps expectations the same while making tests more sensitive to accidental direct use of those contracts.
Also applies to: 90-96, 118-122, 126-132, 180-189
src/plugins/chat/public/components/chat_window.tsx (1)
66-71: Ref-based timeline access and imperative API look solid; debug log may be unnecessaryUsing
timelineRefwith a stableChatEventHandlerand exposingstartNewChat/sendMessageviauseImperativeHandleare good improvements to avoid stale closures and provide a clean imperative surface.The
[DEBUG] ChatWindow - handleNewChat...console.logis likely leftover instrumentation; if you don't intend to keep verbose logging in production, consider removing it:- const handleNewChat = useCallback(() => { - console.log('[DEBUG] ChatWindow - handleNewChat called, about to call chatService.newThread()'); + const handleNewChat = useCallback(() => { chatService.newThread();Also applies to: 80-83, 261-263, 278-281
src/plugins/chat/public/components/chat_header_button.tsx (1)
185-190: Availability guard is correct; consider avoiding side effects when chat is disabledUsing
core.chat.isAvailable()to short‑circuit rendering is a good way to hide the header button when chat is disabled, and renaming the tools callback arg to_toolsis a nice lint cleanup.Note that because the guard is after all hooks, the component still sets up
chatServicesubscriptions and sidecar handlers even when chat is unavailable. That’s probably fine, but if you want to avoid any side effects in the disabled case, consider a small wrapper:
ChatHeaderButtoncheckscore.chat.isAvailable()and either returnsnullor renders an innerChatHeaderButtonInnerthat contains the existing hook logic.This keeps hooks unconditional in the inner component while skipping subscriptions entirely when chat is off.
Also applies to: 220-222
src/plugins/chat/public/services/chat_event_handler.test.ts (1)
203-257: sendToolResult mock aligns with ChatService contract and improves coverageThe updated test double for
sendToolResult(returning{ observable, toolMessage }) matches the expected shape and the new assertions correctly verify that atoolmessage with the JSON‑encoded result is added to the timeline and linked to the righttoolCallId. The minimal observable stub withsubscribe/unsubscribeis adequate given current usage.src/core/public/mocks.ts (1)
52-53: CoreStart now correctly includes a chat mock; consider adding a setup mock when neededWiring
coreChatServiceMock.createStartContract()intocreateCoreStartMockand re‑exportingcoreChatServiceMockkeeps tests aligned with the newcore.chatsurface and avoids ad‑hoc mocks in plugins.If the core
ChatServiceis (or becomes) exposed onCoreSetupas well, it would be worth mirroring this by adding achat: coreChatServiceMock.createSetupContract()property increateCoreSetupMockto keep the mocked CoreSetup/Start shapes consistent.Also applies to: 68-69, 102-121
src/plugins/chat/public/services/chat_event_handler.ts (1)
489-495: Consider adding a null check fortoolMessagebefore updating timeline.The destructured
toolMessagecould potentially be undefined ifsendToolResultdoesn't return it in all cases. Adding a guard would prevent adding undefined to the timeline.- const { observable, toolMessage } = await (this.chatService as any).sendToolResult( + const { observable, toolMessage } = await (this.chatService as any).sendToolResult( toolCallId, result, messages ); - this.onTimelineUpdate((prev) => [...prev, toolMessage]); + if (toolMessage) { + this.onTimelineUpdate((prev) => [...prev, toolMessage]); + }src/plugins/chat/server/routes/index.test.ts (1)
44-52: Mock capabilities resolver setup is unused in some test paths.The
mockCapabilitiesResolveris initialized inbeforeEachbut some tests (e.g., lines 72-120, 122-138) calltestSetupwithout passing a capabilities resolver, making this setup ineffective for those tests. This is fine since those tests verify the "no capabilities resolver" scenario, but consider adding a brief comment clarifying the distinction between tests that use the mock vs. those that intentionally omit it.src/plugins/chat/server/routes/ml_routes/generic_ml_router.ts (1)
155-159: Fragile 404 detection via string matching.Checking
error.message.includes('404')may produce false positives (e.g., if "404" appears in an unrelated error message) or false negatives (if the error format changes). Consider checking for a status code property on the error object if available.src/plugins/chat/public/plugin.ts (1)
141-141: Verify non-null assertion is safe in mount callback timing.The non-null assertion
this.chatService!assumes the mount callback is only invoked afterstart()has initializedchatService. While this is typically guaranteed by the plugin lifecycle, consider adding a guard for defensive coding:const mountPoint = toMountPoint( React.createElement(ChatHeaderButton, { core, - chatService: this.chatService!, + chatService: this.chatService, contextProvider: deps.contextProvider, charts: deps.charts, suggestedActionsService: this.suggestedActionsService!, }) );If
ChatHeaderButtoncan handle an undefinedchatServicegracefully, this would be safer. Otherwise, the current assertion is acceptable given the lifecycle guarantees.src/plugins/chat/server/routes/index.ts (1)
119-121: Lazy initialization of ML router on every request.
MLAgentRouterRegistry.initialize(capabilities)is called on every request. While the registry guards against re-initialization internally, this pattern adds overhead. Consider initializing the router once during plugin setup if capabilities are static.Based on the relevant code snippet from
router_registry.ts, the registry has aninitializedflag that prevents re-registration. This is acceptable for now, but if capabilities are known at setup time, moving initialization there would be cleaner.src/plugins/chat/common/chat_capabilities.ts (1)
26-28: Consider narrowing theanytype for capabilities.While using
anyforcapabilitiesis pragmatic for cross-environment compatibility, consider defining a minimal interface or using a more specific type to improve type safety and developer experience.+interface ChatCapabilities { + investigation?: { + agenticFeaturesEnabled?: boolean; + }; +} + -export function hasInvestigationCapabilities(capabilities?: any): boolean { +export function hasInvestigationCapabilities(capabilities?: ChatCapabilities): boolean { return capabilities?.investigation?.agenticFeaturesEnabled === true; }src/plugins/chat/public/services/chat_service.test.ts (1)
183-214: Thread ID uniqueness test relies on timing for differentiation.The test creates two separate mock core services with thread IDs generated at slightly different times (using
Date.now()andDate.now() + 1). While this works, it couples test correctness to timing behavior.Consider using deterministic mock IDs for clearer test intent:
- const generateThreadId1 = () => - `thread-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`; - const generateThreadId2 = () => - `thread-${Date.now() + 1}-${Math.random().toString(36).substring(2, 11)}`; + const mockThreadId1 = 'thread-1000000000001-abcdefghi'; + const mockThreadId2 = 'thread-1000000000002-jklmnopqr'; - const mockThreadId1$ = new BehaviorSubject<string>(generateThreadId1()); - const mockThreadId2$ = new BehaviorSubject<string>(generateThreadId2()); + const mockThreadId1$ = new BehaviorSubject<string>(mockThreadId1); + const mockThreadId2$ = new BehaviorSubject<string>(mockThreadId2);src/core/public/chat/chat_service.ts (1)
169-174: Consider completing the BehaviorSubjects instop()for clean shutdown.The
threadId$andwindowState$BehaviorSubjects are not completed duringstop(). While typically acceptable for core services, completing them would signal to any remaining subscribers that the service is shutting down.public async stop() { this.implementation = undefined; this.suggestedActionsService = undefined; this.windowOpenCallbacks.clear(); this.windowCloseCallbacks.clear(); + this.threadId$.complete(); + this.windowState$.complete(); }src/plugins/chat/public/services/chat_service.ts (4)
283-306: Consider extracting shared context/runInput building logic.Both
sendMessageandsendToolResultduplicate the pattern of:
- Getting workspace-aware data source ID
- Fetching and transforming contexts from
assistantContextStore- Building
RunAgentInputwith similar structure- Wrapping the observable for tracking
A private helper like
buildRunContext()could reduce duplication and ensure consistency.Also applies to: 348-375
62-74: Repetitive availability checks could be consolidated.The pattern of throwing "Core chat service not available" is repeated across many methods. Consider either:
- Making
coreChatServicea required constructor parameter- Adding a private
requireCoreChatService()helper that throws if unavailable+ private requireCoreChatService(): ChatServiceStart { + if (!this.coreChatService) { + throw new Error('Core chat service not available'); + } + return this.coreChatService; + } + public getThreadId = () => { - if (!this.coreChatService) { - throw new Error('Core chat service not available'); - } - return this.coreChatService.getThreadId(); + return this.requireCoreChatService().getThreadId(); };Also applies to: 98-155
219-222: Silent catch block swallows errors without logging.The empty catch block on lines 219-221 silently falls back to direct service call, but swallowing the error makes debugging difficult. Consider adding a warning log:
} catch (error) { // Fall back to direct service call if delegation fails + // eslint-disable-next-line no-console + console.warn('ChatWindow delegation failed, falling back to direct call:', error); }
287-294: Global window object access for context store is a code smell.Accessing
(window as any).assistantContextStorecouples this service to a global object. While this may be existing legacy code, consider injecting the context store as a dependency in a future refactor.src/core/public/chat/types.ts (3)
71-77:ToolMessagedoesn't extendBaseMessageunlike other message types.All other message types extend
BaseMessage, butToolMessagedefinesid,content, androledirectly. This inconsistency could cause issues if code expects all messages to haveBaseMessageproperties likename.Consider extending
BaseMessagefor consistency:-export interface ToolMessage { - id: string; - content: string; +export interface ToolMessage extends BaseMessage { role: 'tool'; + content: string; toolCallId: string; error?: string; }
135-143: Theobservable: anyreturn type loses type safety.Both
ChatServiceInterfaceandChatImplementationFunctionsuseanyfor the observable return type. Consider defining a proper type for the observable emissions to improve type safety and developer experience.For example:
import { Observable } from 'rxjs'; interface ChatEvent { type: 'message' | 'tool_call' | 'error' | 'complete'; // ... event-specific properties } sendMessage(...): Promise<{ observable: Observable<ChatEvent>; userMessage: UserMessage }>;Also applies to: 151-160
181-181:suggestedActionsService.registerProviderusesanyfor provider type.Consider defining a proper interface for the provider parameter to improve type safety. If a
SuggestedActionProviderinterface exists elsewhere, it should be referenced here.Also applies to: 187-189, 200-202
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
yarn.lockis excluded by!**/yarn.lock,!**/*.lock
📒 Files selected for processing (53)
changelogs/fragments/10983.yml(1 hunks)src/core/public/chat/chat_service.mock.ts(1 hunks)src/core/public/chat/chat_service.test.ts(1 hunks)src/core/public/chat/chat_service.ts(1 hunks)src/core/public/chat/index.ts(1 hunks)src/core/public/chat/types.ts(1 hunks)src/core/public/core_system.ts(9 hunks)src/core/public/index.ts(4 hunks)src/core/public/mocks.ts(3 hunks)src/core/public/plugins/plugin_context.ts(2 hunks)src/core/public/plugins/plugins_service.test.ts(3 hunks)src/plugins/chat/common/chat_capabilities.test.ts(1 hunks)src/plugins/chat/common/chat_capabilities.ts(1 hunks)src/plugins/chat/common/types.ts(2 hunks)src/plugins/chat/opensearch_dashboards.json(1 hunks)src/plugins/chat/public/actions/graph_timeseries_data_action.test.tsx(1 hunks)src/plugins/chat/public/actions/graph_timeseries_data_action.tsx(2 hunks)src/plugins/chat/public/components/chat_header_button.test.tsx(14 hunks)src/plugins/chat/public/components/chat_header_button.tsx(2 hunks)src/plugins/chat/public/components/chat_window.tsx(3 hunks)src/plugins/chat/public/components/graph_visualization/error_boundary.tsx(0 hunks)src/plugins/chat/public/components/graph_visualization/error_display.tsx(0 hunks)src/plugins/chat/public/components/graph_visualization/error_handler.ts(0 hunks)src/plugins/chat/public/components/graph_visualization/validation.ts(0 hunks)src/plugins/chat/public/plugin.test.ts(4 hunks)src/plugins/chat/public/plugin.ts(5 hunks)src/plugins/chat/public/services/ag_ui_agent.ts(2 hunks)src/plugins/chat/public/services/chat_context_manager.test.ts(0 hunks)src/plugins/chat/public/services/chat_context_manager.ts(0 hunks)src/plugins/chat/public/services/chat_event_handler.test.ts(1 hunks)src/plugins/chat/public/services/chat_event_handler.ts(1 hunks)src/plugins/chat/public/services/chat_service.test.ts(15 hunks)src/plugins/chat/public/services/chat_service.ts(15 hunks)src/plugins/chat/public/types.ts(2 hunks)src/plugins/chat/server/index.ts(1 hunks)src/plugins/chat/server/plugin.ts(1 hunks)src/plugins/chat/server/routes/index.test.ts(4 hunks)src/plugins/chat/server/routes/index.ts(3 hunks)src/plugins/chat/server/routes/ml_routes/generic_ml_router.ts(1 hunks)src/plugins/chat/server/routes/ml_routes/ml_agent_router.ts(1 hunks)src/plugins/chat/server/routes/ml_routes/ml_commons_agent.test.ts(0 hunks)src/plugins/chat/server/routes/ml_routes/ml_commons_agent.ts(0 hunks)src/plugins/chat/server/routes/ml_routes/router_registry.ts(1 hunks)src/plugins/data_source_management/public/index.ts(1 hunks)src/plugins/explore/opensearch_dashboards.json(1 hunks)src/plugins/explore/public/actions/ask_ai_action.test.ts(3 hunks)src/plugins/explore/public/actions/ask_ai_action.ts(1 hunks)src/plugins/explore/public/build_services.ts(1 hunks)src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx(3 hunks)src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.tsx(3 hunks)src/plugins/explore/public/components/tabs/action_bar/action_bar.tsx(2 hunks)src/plugins/explore/public/plugin.ts(1 hunks)src/plugins/explore/public/types.ts(1 hunks)
💤 Files with no reviewable changes (8)
- src/plugins/chat/public/components/graph_visualization/validation.ts
- src/plugins/chat/public/components/graph_visualization/error_handler.ts
- src/plugins/chat/public/components/graph_visualization/error_display.tsx
- src/plugins/chat/public/components/graph_visualization/error_boundary.tsx
- src/plugins/chat/public/services/chat_context_manager.test.ts
- src/plugins/chat/server/routes/ml_routes/ml_commons_agent.test.ts
- src/plugins/chat/public/services/chat_context_manager.ts
- src/plugins/chat/server/routes/ml_routes/ml_commons_agent.ts
🧰 Additional context used
🧬 Code graph analysis (25)
src/plugins/chat/server/routes/ml_routes/router_registry.ts (3)
src/plugins/chat/common/chat_capabilities.ts (1)
hasInvestigationCapabilities(26-28)src/plugins/chat/server/routes/ml_routes/ml_agent_router.ts (1)
MLAgentRouterFactory(49-74)src/plugins/chat/server/routes/ml_routes/generic_ml_router.ts (1)
GenericMLRouter(79-176)
src/plugins/explore/public/components/tabs/action_bar/action_bar.tsx (1)
src/plugins/opensearch_dashboards_utils/public/index.ts (1)
of(41-41)
src/plugins/chat/server/routes/ml_routes/ml_agent_router.ts (1)
src/core/server/index.ts (4)
RequestHandlerContext(436-460)OpenSearchDashboardsRequest(187-187)OpenSearchDashboardsResponseFactory(215-215)IOpenSearchDashboardsResponse(191-191)
src/core/public/chat/chat_service.test.ts (2)
src/core/public/chat/chat_service.ts (1)
ChatService(19-175)src/core/public/chat/types.ts (1)
ChatImplementationFunctions(149-165)
src/core/public/index.ts (2)
src/core/public/chat/types.ts (2)
ChatServiceSetup(170-190)ChatServiceStart(195-203)src/core/public/chat/index.ts (2)
ChatServiceSetup(8-8)ChatServiceStart(9-9)
src/plugins/chat/common/chat_capabilities.ts (1)
src/plugins/chat/server/index.ts (1)
config(13-19)
src/plugins/chat/common/chat_capabilities.test.ts (2)
src/plugins/chat/common/chat_capabilities.ts (4)
hasInvestigationCapabilities(26-28)ContextProviderConfig(17-19)ChatConfig(9-12)isChatEnabled(42-59)src/plugins/chat/server/index.ts (1)
config(13-19)
src/plugins/explore/public/actions/ask_ai_action.ts (2)
src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)src/core/public/index.ts (1)
ChatServiceStart(440-440)
src/plugins/chat/public/services/chat_event_handler.test.ts (1)
src/core/public/chat/types.ts (1)
ToolMessage(71-77)
src/plugins/chat/server/routes/index.ts (3)
src/core/server/index.ts (1)
OpenSearchDashboardsRequest(187-187)src/plugins/chat/server/routes/ml_routes/router_registry.ts (1)
MLAgentRouterRegistry(16-50)src/plugins/chat/server/routes/ml_routes/ml_agent_router.ts (1)
MLAgentRouterFactory(49-74)
src/plugins/explore/public/build_services.ts (2)
src/plugins/explore/public/services/slot_registry/index.ts (1)
SlotRegistryService(7-7)src/plugins/explore/public/services/slot_registry/slot_registry_service.ts (1)
SlotRegistryService(65-116)
src/core/public/core_system.ts (2)
src/core/public/chat/chat_service.ts (1)
ChatService(19-175)src/plugins/chat/public/services/chat_service.ts (1)
ChatService(31-481)
src/plugins/chat/public/types.ts (1)
src/plugins/data_source_management/public/index.ts (1)
DataSourceManagementPluginSetup(18-18)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (3)
src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)src/core/public/chat/index.ts (1)
ChatServiceStart(9-9)src/core/public/index.ts (1)
ChatServiceStart(440-440)
src/plugins/chat/public/components/chat_window.tsx (1)
src/core/public/chat/types.ts (1)
Message(82-87)
src/core/public/plugins/plugins_service.test.ts (3)
src/core/public/chat/chat_service.mock.ts (1)
coreChatServiceMock(50-53)src/core/public/chat/index.ts (1)
coreChatServiceMock(24-24)src/core/public/mocks.ts (1)
coreChatServiceMock(68-68)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.tsx (3)
src/plugins/explore/public/types/log_actions.ts (1)
LogActionItemProps(37-46)src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)src/plugins/context_provider/public/hooks/use_dynamic_context.ts (1)
useDynamicContext(18-78)
src/core/public/mocks.ts (2)
src/core/public/chat/chat_service.mock.ts (1)
coreChatServiceMock(50-53)src/core/public/chat/index.ts (1)
coreChatServiceMock(24-24)
src/core/public/chat/chat_service.ts (4)
src/core/public/chat/index.ts (6)
ChatService(23-23)ChatServiceSetup(8-8)ChatServiceStart(9-9)ChatImplementationFunctions(10-10)ChatWindowState(20-20)Message(11-11)src/core/public/chat/types.ts (5)
ChatServiceSetup(170-190)ChatServiceStart(195-203)ChatImplementationFunctions(149-165)ChatWindowState(97-101)Message(82-87)src/core/public/index.ts (5)
ChatServiceSetup(439-439)ChatServiceStart(440-440)ChatImplementationFunctions(441-441)ChatWindowState(443-443)Message(442-442)src/plugins/chat/common/types.ts (1)
Message(12-12)
src/core/public/chat/chat_service.mock.ts (1)
src/core/public/chat/types.ts (2)
ChatServiceSetup(170-190)ChatServiceStart(195-203)
src/plugins/chat/server/routes/ml_routes/generic_ml_router.ts (2)
src/core/server/index.ts (4)
RequestHandlerContext(436-460)OpenSearchDashboardsRequest(187-187)OpenSearchDashboardsResponseFactory(215-215)IOpenSearchDashboardsResponse(191-191)src/plugins/chat/server/routes/ml_routes/ml_agent_router.ts (1)
MLAgentRouter(19-43)
src/plugins/chat/public/actions/graph_timeseries_data_action.test.tsx (1)
src/plugins/chat/public/actions/graph_timeseries_data_action.tsx (1)
useGraphTimeseriesDataAction(42-250)
src/plugins/chat/public/services/ag_ui_agent.ts (1)
src/plugins/chat/common/types.ts (1)
RunAgentInput(111-111)
src/plugins/chat/server/routes/index.test.ts (1)
src/plugins/chat/server/routes/index.ts (1)
defineRoutes(81-161)
src/plugins/explore/public/actions/ask_ai_action.test.ts (2)
src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)src/plugins/explore/public/actions/ask_ai_action.ts (1)
createAskAiAction(13-29)
🪛 YAMLlint (1.37.1)
changelogs/fragments/10983.yml
[error] 2-2: syntax error: expected , but found ''
(syntax)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (67)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: bundle-analyzer
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Lint and validate
- GitHub Check: lighthouse
🔇 Additional comments (53)
src/plugins/chat/public/types.ts (1)
9-25: Wiring optional DataSourceManagement into chat start deps looks correctThe new
DataSourceManagementPluginSetupimport and optionaldataSourceManagementfield onAppPluginStartDependenciesare consistent with how other plugin deps are modeled and keep the dependency truly optional at runtime.src/plugins/explore/opensearch_dashboards.json (1)
24-25: Removingchatfrom Explore optionalPlugins matches core chat integrationNow that Explore consumes chat via the core
ChatServicesurface, droppingchatfromoptionalPluginsavoids unnecessary plugin coupling and startup ordering constraints.src/plugins/chat/public/actions/graph_timeseries_data_action.tsx (1)
42-49: Enabled flag is correctly threaded through to the assistant actionThe new
enabled: boolean = trueparameter cleanly propagates intouseAssistantAction, preserving default behavior while allowing callers to disable the action when needed.Also applies to: 248-249
src/plugins/data_source_management/public/index.ts (1)
29-29: ExposinggetWorkspacesvia the DSM public API is consistent with existing helpersAdding
getWorkspacesnext togetDefaultDataSourceId/getDefaultDataSourceId$is a natural extension of the public surface for workspace-aware data source handling.src/plugins/chat/server/index.ts (1)
13-18: Exposingenabledto the browser is appropriate for client-side chat gatingIncluding
enabled: trueinexposeToBrowserlets the public chat plugin honor server-side configuration without exposing any sensitive data, and complements the already-exposedagUiUrl.src/plugins/chat/server/plugin.ts (1)
15-30: Capabilities resolver typing is consistent with core APIImporting
Capabilitiesand typingcapabilitiesResolveras returningPromise<Capabilities>matchescore.capabilities.resolveCapabilitiesand improves type safety without changing behavior. No further changes needed here.src/plugins/chat/opensearch_dashboards.json (1)
13-15: DSM as optional plugin but required bundleDeclaring
dataSourceManagementas an optional plugin while requiring its bundle is a reasonable way to share its UI without hard runtime coupling. Please just confirm chat’s flows are exercised on a deployment without the DSM plugin installed to ensure the feature gates and fallbacks behave as expected.src/plugins/explore/public/types.ts (1)
182-187: MakingslotRegistryoptional matches new usageChanging
slotRegistrytoslotRegistry?: SlotRegistryServicealigns with the new safe-access pattern inaction_bar.tsxand reflects that Explore can run without a slot registry. This looks consistent and should be safe for consumers.src/plugins/explore/public/plugin.ts (1)
515-517: Always registering Ask AI and delegating enablement is reasonableCreating the Ask AI action unconditionally with
core.chatand letting itsisCompatiblelogic handle enablement is a good separation of concerns, providedcreateAskAiActionfully respects chat availability/capabilities and thatcore.chatis always defined onCoreStart.src/plugins/explore/public/components/tabs/action_bar/action_bar.tsx (1)
7-8: Safe fallback whenslotRegistryis absentUsing optional chaining plus
of([])ensuressortedSlotItems$is always a valid observable and avoids crashes whenslotRegistryis undefined. TheuseMemodependency is correct and keeps the observable instance stable. Looks good as-is.Also applies to: 30-32
src/core/public/plugins/plugin_context.ts (2)
127-127: LGTM!The chat service is correctly propagated to the plugin setup context, following the same pattern as other core services like
workspacesandkeyboardShortcut.
183-183: LGTM!The chat service is correctly propagated to the plugin start context, maintaining consistency with the setup context pattern.
src/plugins/chat/public/services/ag_ui_agent.ts (2)
31-31: LGTM!The optional
dataSourceIdparameter is a backward-compatible addition that enables workspace-aware data source handling.
48-53: LGTM!The URL construction correctly handles the optional
dataSourceIdquery parameter with proper URL encoding viaencodeURIComponent.src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (2)
9-9: LGTM!The import correctly references
ChatServiceStartfrom the new core public API location, aligning with the refactored architecture.
34-47: LGTM!The mock object correctly implements all required methods from the
ChatServiceStartinterface. The stub implementations withjest.fn()are appropriate for these component-level tests.src/plugins/chat/public/actions/graph_timeseries_data_action.test.tsx (2)
62-62: LGTM!The assertion correctly verifies that
enableddefaults totruewhen no parameter is passed, matching the function signatureuseGraphTimeseriesDataAction(enabled: boolean = true).
65-96: LGTM!The new tests comprehensively cover the
enabledflag behavior:
- Explicitly passing
trueregisters the action as enabled- Explicitly passing
falseregisters the action as disabledThis provides good coverage for the optional parameter handling.
src/plugins/chat/public/services/chat_event_handler.ts (1)
304-306: Multiple uses of(this.chatService as any)indicate a typing gap.The
sendToolResultmethod is accessed via type casting at lines 304, 330, and 489. Consider updating theChatServiceinterface to include thesendToolResultmethod signature to improve type safety and IDE support.src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.tsx (1)
18-18: LGTM! Import and type updated to use core chat service.The import path and type have been correctly updated to use
ChatServiceStartfrom the core public API, aligning with the refactored chat architecture.Also applies to: 24-24
src/core/public/plugins/plugins_service.test.ts (1)
63-63: LGTM! Test scaffolding updated to include chat service.The chat service mock has been properly integrated into the test setup and start dependency mocks, ensuring tests reflect the new core chat service integration.
Also applies to: 117-117, 139-139
src/plugins/chat/common/chat_capabilities.test.ts (1)
1-106: LGTM! Comprehensive test coverage for chat capabilities.The test suite thoroughly validates the capability checking logic across various scenarios including:
- Open source environments with
agUiUrlconfigured- Production environments with investigation feature flags
- Proper handling of disabled configurations
- Safe defaults for undefined/empty capabilities
src/plugins/chat/server/routes/ml_routes/router_registry.ts (1)
1-50: LGTM! Clean router registry implementation.The
MLAgentRouterRegistryprovides a clean singleton pattern for managing ML agent router lifecycle:
- Proper initialization guard prevents duplicate registration
- Capability-based router selection aligns with the PR's feature-gating approach
reset()method supports testing scenariossrc/plugins/chat/public/components/chat_header_button.test.tsx (2)
33-33: LGTM! Test setup enhanced with config and capabilities.The test setup now includes mock configuration and capability flags, enabling proper testing of feature-gated chat functionality.
Also applies to: 68-78
323-445: LGTM! Comprehensive feature flag visibility tests.The new test suite thoroughly validates rendering behavior across different capability scenarios:
- Properly tests availability gating via
core.chat.isAvailable()- Validates open-source environment behavior (undefined capabilities)
- Ensures hooks are called consistently regardless of availability (lines 422-444) - this is important for React's rules of hooks
src/core/public/index.ts (1)
106-106: LGTM! Core public API extended with chat service.The chat service has been properly integrated into the core public API:
CoreSetupandCoreStartinterfaces extended with chat fields- Necessary types exported for plugin consumption
- Consistent JSDoc annotations
Also applies to: 296-297, 356-357, 437-444
src/plugins/explore/public/actions/ask_ai_action.ts (1)
8-8: LGTM! Action updated to use core chat service.The changes properly migrate to the core
ChatServiceStart:
- Import path updated to core public API
- Function signature now requires
ChatServiceStart(no longer optional)isAvailable()method provides cleaner availability checking- Removed unnecessary non-null assertion
Also applies to: 13-13, 21-21, 25-26
src/core/public/core_system.ts (4)
60-60: LGTM! ChatService integrated into core system.The
ChatServicehas been properly instantiated and added as a private field in theCoreSystemclass.Also applies to: 119-119, 149-149
178-178: LGTM! Chat service wired into setup phase.The chat service is properly initialized during setup and included in the
InternalCoreSetupcontract, making it available to plugins during their setup phase.Also applies to: 200-200
247-248: LGTM! Chat service wired into start phase and application context.The chat service is:
- Started during the core start phase (line 248)
- Included in the application mount context (line 284) for plugin access
- Exposed in the
InternalCoreStartcontract (line 301)This ensures plugins can access the chat service at runtime.
Also applies to: 284-284, 301-301
354-354: LGTM! Chat service properly cleaned up.The chat service's
stop()method is called duringCoreSystem.stop(), ensuring proper cleanup of subscriptions and resources.src/core/public/chat/index.ts (1)
6-24: LGTM!Clean barrel file that provides a well-organized public API surface for the chat subsystem. The exports are logically grouped by source module.
src/plugins/explore/public/build_services.ts (1)
28-29: LGTM!Making
isDatasetManagementEnableddefault tofalseandslotRegistryoptional aligns with the broader refactoring to decouple dependencies. This provides flexibility for callers without breaking existing consumers.src/plugins/chat/server/routes/index.test.ts (1)
251-431: Good test coverage for ML integration routing scenarios.The "Generic ML Integration" test suite comprehensively covers the key routing decision paths, including capability-based routing, fallback scenarios, and error conditions. The tests properly verify that AG-UI is used as the fallback when ML routing conditions aren't met.
src/plugins/chat/server/routes/ml_routes/ml_agent_router.ts (1)
49-73: LGTM!The
MLAgentRouterFactoryprovides a clean singleton-like abstraction for managing the ML router instance. TheclearRouters()method appropriately enables test isolation. The interface is well-documented with clear JSDoc comments.src/core/public/chat/chat_service.test.ts (1)
9-194: Comprehensive test coverage for ChatService.The tests thoroughly cover the ChatService lifecycle including setup, start, and stop phases. Key areas validated:
- Contract shape verification
- Availability state with/without implementation
- Thread ID and window state management via observables
- Callback invocation on window state changes
- Error handling when implementation is missing
- Delegation to implementation when available
src/core/public/chat/chat_service.mock.ts (1)
9-53: LGTM!The mock implementation provides a complete and consistent test surface for both setup and start contracts. Default values appropriately mirror the expected initial state of the ChatService. The use of
BehaviorSubjectfor observable mocks correctly reflects the real implementation behavior.src/plugins/chat/public/plugin.ts (2)
84-91: Storing CoreSetup for later use is appropriate.The pattern of storing
CoreSetupduring setup phase for use in the start phase is a common approach when plugin lifecycle methods need access to setup-phase resources.
114-129: Good defensive registration with optional chaining.The conditional checks (
this.coreSetup?.chat?.setImplementation) safely handle scenarios where the core chat service may not be available, preventing runtime errors during plugin initialization.src/plugins/chat/server/routes/index.ts (1)
104-108: LGTM on dataSourceId query parameter support.The optional
dataSourceIdquery parameter is properly validated withschema.maybe()and correctly passed through to both the ML router and AG-UI proxy paths.src/plugins/chat/common/chat_capabilities.ts (1)
42-59: Well-structured unified enablement logic.The
isChatEnabledfunction provides clear, documented logic with proper layering: base requirements first, then environment-specific checks. The JSDoc documentation effectively communicates the function's purpose.src/plugins/explore/public/actions/ask_ai_action.test.ts (2)
20-34: Mock structure properly aligns with ChatServiceStart interface.The mock correctly implements the expected surface of
ChatServiceStartincludingisAvailable,sendMessageWithWindow, thread/window state methods, and the optionalsuggestedActionsService. This aligns with the type definition shown in the relevant code snippet.
56-68: Good test coverage for availability states.The tests properly verify both the available and unavailable states by creating separate mock instances with different
isAvailablereturn values. This ensures theisCompatiblelogic is thoroughly tested.src/plugins/chat/common/types.ts (2)
8-19: Clean type consolidation pattern.Re-exporting type definitions from
core/public/chatwhile keeping Zod schemas locally is a good separation of concerns. The core owns the canonical type definitions, while the plugin retains runtime validation capability.
21-83: Verify Zod schemas remain in sync with core type definitions.The Zod schemas define the runtime validation shape independently from the re-exported TypeScript types. If the core types evolve, these schemas may become inconsistent.
Consider adding a compile-time check to ensure schema inference aligns with core types:
import type { Message } from '../../../core/public/chat'; import { z } from 'zod'; // After MessageSchema definition: type SchemaMessage = z.infer<typeof MessageSchema>; // This will cause a compile error if schemas diverge from core types: const _typeCheck: SchemaMessage = {} as Message;src/plugins/chat/public/services/chat_service.test.ts (3)
42-102: Comprehensive and well-structured mock for core chat service.The mock properly implements observable-based state management with
BehaviorSubject, simulates callback registration/cleanup, and provides realistic behavior for window and thread state changes. This aligns well with the coreChatServiceStartinterface.
753-760: Test comment acknowledges implementation-dependent behavior.The comment correctly notes that core service behavior for duplicate values is implementation-dependent. This is a pragmatic approach when testing delegation to an external service.
274-286: Test assertions properly verify dataSourceId handling.The tests correctly verify that
runAgentis called withundefinedfordataSourceIdwhen nouiSettingsare provided. The explicit comment clarifies this expected behavior.src/core/public/chat/chat_service.ts (2)
58-67: Callbacks are invoked before the state observable is updated.The open/close callbacks at lines 61-64 are triggered before
this.windowState$.next(newState)on line 67. If any callback readsgetWindowState()orisWindowOpen(), it will receive the old state, not the new one.Consider whether this ordering is intentional. If callbacks should see the updated state:
- // Trigger callbacks on window state change - if (currentState.isWindowOpen !== newState.isWindowOpen) { - if (newState.isWindowOpen) { - this.windowOpenCallbacks.forEach((callback) => callback()); - } else { - this.windowCloseCallbacks.forEach((callback) => callback()); - } - } - this.windowState$.next(newState); + + // Trigger callbacks after state update so callbacks see the new state + if (currentState.isWindowOpen !== newState.isWindowOpen) { + if (newState.isWindowOpen) { + this.windowOpenCallbacks.forEach((callback) => callback()); + } else { + this.windowCloseCallbacks.forEach((callback) => callback()); + } + }
120-140: Verify the plugin'sopenWindow/closeWindowimplementations don't create circular calls.The core service calls
this.implementation.openWindow()and then updates state viasetWindowState(). If the plugin's implementation also calls back to the core service to update state, this could result in unexpected behavior or double state updates.Ensure
ChatImplementationFunctions.openWindow()andcloseWindow()only handle plugin-specific logic (e.g., rendering the window) without calling back tocoreChatService.setWindowState()or other state management methods.src/plugins/chat/public/services/chat_service.ts (2)
54-60: Constructor logic can throw before object is fully initialized.At line 55, if
currentChatState?.threadIdis truthy butthis.coreChatServiceis set,setThreadIdis called. However, later at line 409,saveCurrentChatStatecallsthis.getThreadId()which throws ifcoreChatServiceis undefined.The constructor itself is safe since it checks
this.coreChatServicebefore callingsetThreadId, but ifcoreChatServiceis not provided, later calls to methods likesaveCurrentChatStateornewThreadwill throw. This might be intentional, but verify this degraded behavior is acceptable.
229-265: LGTM on workspace-aware data source resolution.The implementation properly handles fallbacks when UI settings or workspaces are unavailable, and the scope determination logic is correct. The console warnings are helpful for debugging without breaking functionality.
src/core/public/chat/types.ts (1)
82-93: Well-structured discriminated union for message types.The
Messageunion type with specific role literals enables proper type narrowing. The separateRoletype alias is useful for generic role handling.
| refactor: | ||
| - [Chat] Refactor chat architecture: Extract shared infrastructure into a core chat service ([#10983](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/10983)) No newline at end of file |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix YAML syntax in changelog fragment (colon in unquoted scalar)
The current fragment is not valid YAML because the plain scalar on line 2 contains ": ":
refactor:
- [Chat] Refactor chat architecture: Extract shared infrastructure into a core chat service ([#10983](...))Quote the string (and optionally indent the list item) to satisfy YAMLlint and prevent changelog generation failures:
-refactor:
-- [Chat] Refactor chat architecture: Extract shared infrastructure into a core chat service ([#10983](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/10983))
+refactor:
+ - "[Chat] Refactor chat architecture: Extract shared infrastructure into a core chat service ([#10983](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/10983))"🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 2-2: syntax error: expected , but found ''
(syntax)
🤖 Prompt for AI Agents
In changelogs/fragments/10983.yml around lines 1 to 2, the list item contains an
unquoted scalar with a colon which breaks YAML parsing; fix it by quoting the
entire list string (single or double quotes) and optionally indenting the list
item under refactor to produce valid YAML (e.g. refactor: newline - "Your quoted
string..."), ensuring the colon inside the message is inside the quotes so
YAMLlint and changelog generation succeed.
| public setup(): ChatServiceSetup { | ||
| return { | ||
| setImplementation: (implementation: ChatImplementationFunctions) => { | ||
| this.implementation = implementation; | ||
| }, | ||
|
|
||
| setSuggestedActionsService: (service: { registerProvider(provider: any): void }) => { | ||
| this.suggestedActionsService = service; | ||
| }, | ||
|
|
||
| suggestedActionsService: this.suggestedActionsService, | ||
| }; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestedActionsService will always be undefined in the returned setup contract.
Line 49 captures this.suggestedActionsService at the moment setup() is called, before setSuggestedActionsService has been invoked. Consumers accessing suggestedActionsService from the setup contract will always get undefined.
If the intent is to expose the service after it's set, consider making it a getter:
public setup(): ChatServiceSetup {
return {
setImplementation: (implementation: ChatImplementationFunctions) => {
this.implementation = implementation;
},
setSuggestedActionsService: (service: { registerProvider(provider: any): void }) => {
this.suggestedActionsService = service;
},
- suggestedActionsService: this.suggestedActionsService,
+ get suggestedActionsService() {
+ return this.suggestedActionsService;
+ },
};
}Note: This requires a reference to the outer this, so you may need to adjust the implementation accordingly.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| public setup(): ChatServiceSetup { | |
| return { | |
| setImplementation: (implementation: ChatImplementationFunctions) => { | |
| this.implementation = implementation; | |
| }, | |
| setSuggestedActionsService: (service: { registerProvider(provider: any): void }) => { | |
| this.suggestedActionsService = service; | |
| }, | |
| suggestedActionsService: this.suggestedActionsService, | |
| }; | |
| } | |
| public setup(): ChatServiceSetup { | |
| const self = this; | |
| return { | |
| setImplementation: (implementation: ChatImplementationFunctions) => { | |
| this.implementation = implementation; | |
| }, | |
| setSuggestedActionsService: (service: { registerProvider(provider: any): void }) => { | |
| this.suggestedActionsService = service; | |
| }, | |
| get suggestedActionsService() { | |
| return self.suggestedActionsService; | |
| }, | |
| }; | |
| } |
🤖 Prompt for AI Agents
In src/core/public/chat/chat_service.ts around lines 39 to 51, the returned
setup object captures this.suggestedActionsService immediately so
suggestedActionsService will always be undefined for consumers; change the setup
return to expose the service lazily (e.g., define suggestedActionsService as a
getter or a function that returns this.suggestedActionsService) so callers see
the value after setSuggestedActionsService is called, ensure the getter
references the outer this (use a function or Object.defineProperty/get syntax)
and update the ChatServiceSetup typing to reflect the getter or accessor
signature.
| // Forward the request to AG-UI server using native fetch (Node 18+) | ||
| const agUiResponse = await fetch(agUiUrl, { | ||
| method: 'POST', | ||
| headers: { | ||
| 'Content-Type': 'application/json', | ||
| Accept: 'text/event-stream', | ||
| }, | ||
| body: JSON.stringify(requestBody), | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing timeout on external fetch request.
The fetch call to the external AG-UI server has no timeout configured. If the AG-UI server becomes unresponsive, this request will hang indefinitely, potentially exhausting server resources.
+ const controller = new AbortController();
+ const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 second timeout
+
// Forward the request to AG-UI server using native fetch (Node 18+)
- const agUiResponse = await fetch(agUiUrl, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Accept: 'text/event-stream',
- },
- body: JSON.stringify(requestBody),
- });
+ try {
+ const agUiResponse = await fetch(agUiUrl, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Accept: 'text/event-stream',
+ },
+ body: JSON.stringify(requestBody),
+ signal: controller.signal,
+ });
+ clearTimeout(timeoutId);Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In src/plugins/chat/server/routes/index.ts around lines 32 to 40, the external
fetch to agUiUrl has no timeout and can hang indefinitely; wrap the fetch in an
AbortController with a configurable timeout (e.g., set via env or a constant),
start a timer that calls controller.abort() after the timeout, pass
controller.signal to fetch, clear the timer after fetch completes, and handle
AbortError to return a sensible error/timeout response to avoid leaking
resources.
| // Convert Web ReadableStream to Node.js Readable stream | ||
| const reader = agUiResponse.body!.getReader(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Potential null pointer dereference on response body.
The non-null assertion agUiResponse.body! can cause a runtime error if the response body is null, which can occur in certain edge cases (e.g., empty responses from server). Add a null check before accessing the reader.
+ if (!agUiResponse.body) {
+ return response.customError({
+ statusCode: 502,
+ body: {
+ message: 'AG-UI server returned empty response body',
+ },
+ });
+ }
+
// Convert Web ReadableStream to Node.js Readable stream
- const reader = agUiResponse.body!.getReader();
+ const reader = agUiResponse.body.getReader();📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Convert Web ReadableStream to Node.js Readable stream | |
| const reader = agUiResponse.body!.getReader(); | |
| if (!agUiResponse.body) { | |
| return response.customError({ | |
| statusCode: 502, | |
| body: { | |
| message: 'AG-UI server returned empty response body', | |
| }, | |
| }); | |
| } | |
| // Convert Web ReadableStream to Node.js Readable stream | |
| const reader = agUiResponse.body.getReader(); |
🤖 Prompt for AI Agents
In src/plugins/chat/server/routes/index.ts around lines 51-52, the code uses a
non-null assertion agUiResponse.body! which can throw if body is null; add an
explicit null check (or guard) before calling getReader() — if agUiResponse.body
is null, handle that case by returning an error/empty stream or throwing a
descriptive error; otherwise call const reader = agUiResponse.body.getReader()
safely. Ensure downstream code accounts for the early-return or thrown error.
| let cachedClientKey: string | null = null; | ||
| let detectionAttempted = false; | ||
|
|
||
| function findMLClient(context: RequestHandlerContext) { | ||
| // Use cached result if available | ||
| if (detectionAttempted) { | ||
| if (cachedClientKey) { | ||
| const contextItem = (context as any)[cachedClientKey]; | ||
| return contextItem?.client; | ||
| } | ||
| return undefined; | ||
| } | ||
|
|
||
| // First-time detection - cache the result | ||
| for (const key of Object.keys(context)) { | ||
| const contextItem = (context as any)[key]; | ||
| if (contextItem?.client?.request && typeof contextItem.client.request === 'function') { | ||
| cachedClientKey = key; // Cache the key name | ||
| detectionAttempted = true; | ||
| return contextItem.client; | ||
| } | ||
| } | ||
|
|
||
| detectionAttempted = true; // Mark as attempted even if not found | ||
| return undefined; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Critical: Module-level caching breaks across requests with different contexts.
The cachedClientKey and detectionAttempted flags persist across all requests for the lifetime of the server process. This causes issues:
- If the first request lacks an ML client,
detectionAttempted = trueis set and all subsequent requests will skip detection, even if they have a valid ML client in context. - Different requests may have different context structures (e.g., multi-tenant, different data sources), but the cache assumes a uniform structure.
Consider detecting the ML client per-request, or scope caching to the request context:
-let cachedClientKey: string | null = null;
-let detectionAttempted = false;
-
-function findMLClient(context: RequestHandlerContext) {
- // Use cached result if available
- if (detectionAttempted) {
- if (cachedClientKey) {
- const contextItem = (context as any)[cachedClientKey];
- return contextItem?.client;
- }
- return undefined;
- }
-
- // First-time detection - cache the result
+function findMLClient(context: RequestHandlerContext) {
+ // Detect ML client on each request - context may vary between requests
for (const key of Object.keys(context)) {
const contextItem = (context as any)[key];
if (contextItem?.client?.request && typeof contextItem.client.request === 'function') {
- cachedClientKey = key; // Cache the key name
- detectionAttempted = true;
return contextItem.client;
}
}
-
- detectionAttempted = true; // Mark as attempted even if not found
return undefined;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| let cachedClientKey: string | null = null; | |
| let detectionAttempted = false; | |
| function findMLClient(context: RequestHandlerContext) { | |
| // Use cached result if available | |
| if (detectionAttempted) { | |
| if (cachedClientKey) { | |
| const contextItem = (context as any)[cachedClientKey]; | |
| return contextItem?.client; | |
| } | |
| return undefined; | |
| } | |
| // First-time detection - cache the result | |
| for (const key of Object.keys(context)) { | |
| const contextItem = (context as any)[key]; | |
| if (contextItem?.client?.request && typeof contextItem.client.request === 'function') { | |
| cachedClientKey = key; // Cache the key name | |
| detectionAttempted = true; | |
| return contextItem.client; | |
| } | |
| } | |
| detectionAttempted = true; // Mark as attempted even if not found | |
| return undefined; | |
| } | |
| function findMLClient(context: RequestHandlerContext) { | |
| // Detect ML client on each request - context may vary between requests | |
| for (const key of Object.keys(context)) { | |
| const contextItem = (context as any)[key]; | |
| if (contextItem?.client?.request && typeof contextItem.client.request === 'function') { | |
| return contextItem.client; | |
| } | |
| } | |
| return undefined; | |
| } |
🤖 Prompt for AI Agents
In src/plugins/chat/server/routes/ml_routes/generic_ml_router.ts around lines 20
to 45, the module-level variables cachedClientKey and detectionAttempted cause
stale cross-request caching and must be removed; instead, perform ML client
detection per-request or scope caching to the request context (e.g., attach the
discovered client key to the passed context object or use a WeakMap keyed by the
context parameter) so each incoming request gets its own detection state;
implement by deleting the module-level flags, making findMLClient always inspect
the provided context on each call or use a WeakMap<Context, string|null> to
store a cached key per-context and fall back to iterating Object.keys(context)
when no entry exists.
| } else { | ||
| return response.custom({ | ||
| statusCode: mlResponse.status, | ||
| headers: { | ||
| 'Content-Type': 'application/json', | ||
| ...mlResponse.headers, | ||
| }, | ||
| body: typeof mlResponse.body === 'string' ? JSON.parse(mlResponse.body) : mlResponse.body, | ||
| }); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Potential JSON parse error when handling buffered response.
If mlResponse.body is not valid JSON, JSON.parse(mlResponse.body) will throw an unhandled exception, causing a 500 response without a clear error message.
} else {
return response.custom({
statusCode: mlResponse.status,
headers: {
'Content-Type': 'application/json',
...mlResponse.headers,
},
- body: typeof mlResponse.body === 'string' ? JSON.parse(mlResponse.body) : mlResponse.body,
+ body: typeof mlResponse.body === 'string' ? safeJsonParse(mlResponse.body) : mlResponse.body,
});
}Add a helper:
function safeJsonParse(body: string): unknown {
try {
return JSON.parse(body);
} catch {
return { rawBody: body };
}
}🤖 Prompt for AI Agents
In src/plugins/chat/server/routes/ml_routes/generic_ml_router.ts around lines
142 to 151, the code JSON.parse(mlResponse.body) can throw if body is not valid
JSON; wrap parsing in a safe helper so parsing errors are caught and a fallback
is returned. Add a small safeJsonParse function that tries JSON.parse and on
failure returns an object containing the rawBody (or the original string) and
use that helper when mlResponse.body is a string so the route returns a stable,
informative payload instead of throwing.
| // Register context with cleanup on unmount (true = cleanup when component unmounts) | ||
| useDynamicContext(contextData, false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix inconsistent comment.
The comment states "cleanup on unmount (true = cleanup when component unmounts)" but the code passes false. Based on the useDynamicContext implementation, passing false means the context will NOT be cleaned up when the component unmounts.
Update the comment to accurately reflect the behavior:
- // Register context with cleanup on unmount (true = cleanup when component unmounts)
+ // Register context without cleanup on unmount (false = no cleanup when component unmounts)
useDynamicContext(contextData, false);Or if cleanup is intended, pass true instead:
- // Register context with cleanup on unmount (true = cleanup when component unmounts)
- useDynamicContext(contextData, false);
+ // Register context with cleanup on unmount
+ useDynamicContext(contextData, true);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Register context with cleanup on unmount (true = cleanup when component unmounts) | |
| useDynamicContext(contextData, false); | |
| // Register context without cleanup on unmount (false = no cleanup when component unmounts) | |
| useDynamicContext(contextData, false); |
🤖 Prompt for AI Agents
In
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.tsx
around lines 67-68, the inline comment incorrectly states that passing true
triggers cleanup on unmount while the code passes false (which means no
cleanup); either update the comment to reflect that
useDynamicContext(contextData, false) disables cleanup on unmount (e.g.,
"Register context without cleanup on unmount (false = do not cleanup)") or, if
the intent was to clean up, change the call to useDynamicContext(contextData,
true) so the context is removed on unmount; make one of these two changes so the
code and comment agree.
| } from './components/data_source_menu'; | ||
| export { DataSourceSelectionService } from './service/data_source_selection_service'; | ||
| export { getDefaultDataSourceId, getDefaultDataSourceId$ } from './components/utils'; | ||
| export { getDefaultDataSourceId, getDefaultDataSourceId$, getWorkspaces } from './components/utils'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why export new function in this PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The chat service needs to determine whether to use:
- Workspace-scoped data source (when user is in a specific workspace)
- Global-scoped data source (when user is in the default/global context)
Previously this func is only called inside of data_source_management
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I can look into whether I can get it from core service since workspace also has core service for infrastructure
Signed-off-by: Anan Zhuang <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
src/core/public/chat/chat_service.ts (1)
39-51:suggestedActionsServicein setup contract still capturesundefinedat call time.Line 49 returns
suggestedActionsService: this.suggestedActionsServicewhich evaluates toundefinedwhensetup()is called, beforesetSuggestedActionsServicehas been invoked. Consumers accessing it from the setup contract will always getundefined.The fix in the start contract (line 157-159) correctly uses a getter. Apply the same pattern here:
public setup(): ChatServiceSetup { return { setImplementation: (implementation: ChatImplementationFunctions) => { this.implementation = implementation; }, setSuggestedActionsService: (service: { registerProvider(provider: any): void }) => { this.suggestedActionsService = service; }, - suggestedActionsService: this.suggestedActionsService, + get suggestedActionsService() { + return chatServiceInstance.suggestedActionsService; + }, }; }Note: You'll need to capture
thisreference (e.g.,const chatServiceInstance = this;) before the return statement, similar to how it's done instart().
🧹 Nitpick comments (10)
src/plugins/chat/public/components/chat_window.tsx (1)
139-163: Consider extracting shared subscription logic.The subscription handling in
handleSend(lines 140-157) andhandleResendMessage(lines 211-228) are nearly identical. Consider extracting this into a helper function to reduce duplication.Also, the returned cleanup function
() => subscription.unsubscribe()is not used by callers sincehandleSendis called without storing the result. Either remove the return or ensure callers use the cleanup when needed.src/core/public/chat/chat_service.ts (2)
163-168: Complete BehaviorSubjects instop()to properly signal lifecycle end.The
threadId$andwindowState$BehaviorSubjects are not completed instop(). While this may not cause immediate issues since the service stops with the application, completing them ensures subscribers receive proper lifecycle notifications and prevents potential memory leaks if subscribers don't explicitly unsubscribe.public async stop() { this.implementation = undefined; this.suggestedActionsService = undefined; this.windowOpenCallbacks.clear(); this.windowCloseCallbacks.clear(); + this.threadId$.complete(); + this.windowState$.complete(); }
111-132: Clarify the callback-based window control pattern.
openWindow()andcloseWindow()trigger callbacks without directly updatingwindowState. This design delegates state management to the UI layer (which callssetWindowState). While this is intentional, consider adding a brief comment explaining this indirection to help future maintainers understand the flow.src/core/public/chat/types.ts (2)
71-77:ToolMessagedoesn't extendBaseMessageunlike other message types.All other message types (
DeveloperMessage,SystemMessage,AssistantMessage,UserMessage) extendBaseMessage, butToolMessageredefinesid,content, androledirectly. While this works due to structural typing, extendingBaseMessagewould be more consistent and ensureToolMessageinherits any future additions toBaseMessage(likename).-export interface ToolMessage { - id: string; - content: string; +export interface ToolMessage extends BaseMessage { role: 'tool'; + content: string; toolCallId: string; error?: string; }
135-143: Consider typing theobservablereturn value more specifically.Using
observable: anyin the return types (lines 138, 154, 160) loses type safety. If the observable emitsChatEventfrom../../common/events, consider typing it asObservable<ChatEvent>or defining an appropriate event union type. This would help consumers understand the expected event stream.sendMessage( content: string, messages: Message[] - ): Promise<{ observable: any; userMessage: UserMessage }>; + ): Promise<{ observable: Observable<ChatEvent>; userMessage: UserMessage }>;src/plugins/chat/public/components/chat_header_button.tsx (1)
61-79: Good defensive coding with guard and try/catch.Adding the early return when
flyoutMountPoint.currentis unavailable and wrappingsidecar.openin try/catch prevents potential runtime errors. However, the catch block silently returns without logging, which could make debugging difficult.Consider logging the error for debugging purposes:
} catch (error) { + console.warn('Failed to open sidecar:', error); return; }src/core/public/chat/chat_service.mock.ts (1)
15-48: Align mock observables and defaults with realChatServicebehavior
getThreadId$/getWindowState$each instantiate a newBehaviorSubject, andgetThreadIdreturns an empty string. In the realChatService, these are shared subjects with generatedthread-*IDs and a single window state stream. Tests that rely on shared state, ID format, or subscription behavior might see discrepancies when swapping between real and mock services.Consider:
- Reusing a single
BehaviorSubjectinstance per mock for thread ID and window state, and- Initializing the thread ID with a
thread-${timestamp}-${random}pattern similar to the core service,so the mock more faithfully mirrors production behavior.
src/plugins/chat/public/plugin.ts (1)
50-82: Guard against writingpaddingSize: undefinedinto window state
setupChatbotWindowStatesubscribes tooverlays.sidecar.getSidecarConfig$()and forwardspaddingSizedirectly tothis.chatService.setWindowState({ paddingSize }). WhenpaddingSizeisundefined, this overwrites the core window state with an undefined value, relying on later readers to fall back to400.To avoid muddying the core state, consider only updating when a concrete value is present:
.subscribe((paddingSize) => { if (paddingSize != null) { this.chatService?.setWindowState({ paddingSize }); } });This keeps the core window state canonical while still reacting to valid sidecar padding updates.
src/plugins/chat/public/services/chat_service.test.ts (1)
243-347: Consider stubbingconsole.warnaround tests that expect nouiSettingsThese tests intentionally construct
ChatServicewithoutuiSettingsand assert thatrunAgentis called with adataSourceIdofundefined. The implementation logs aconsole.warnin that case viagetWorkspaceAwareDataSourceId, so these specs will emit warnings in CI even though the behavior is expected.You might want to stub
console.warnin the relevant suites (or in a shared Jest setup) to keep test output clean while still validating the same behavior.Also applies to: 350-394
src/plugins/chat/public/services/chat_service.ts (1)
67-79: CentralizecoreChatServicenull-checking for clarityMost public methods (
getThreadId,getThreadId$, window state accessors, window event hooks,openWindow/closeWindow,newThread, persistence viagetThreadId) begin with the same guard:if (!this.coreChatService) { throw new Error('Core chat service not available'); }Given that
ChatServiceis only intended to be used with a validChatServiceStart(as in the plugin), you could:
- Enforce a non-optional constructor parameter for
coreChatService, or- Introduce a small helper like
private getCore(): ChatServiceStartto perform the check once.This removes repetition and makes the invariant (“core chat must exist”) explicit at the type or helper level.
Also applies to: 102-115, 117-139, 141-170, 172-184, 195-207, 435-447, 497-503
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (16)
src/core/public/chat/chat_service.mock.ts(1 hunks)src/core/public/chat/chat_service.test.ts(1 hunks)src/core/public/chat/chat_service.ts(1 hunks)src/core/public/chat/types.ts(1 hunks)src/plugins/chat/public/components/chat_header_button.tsx(5 hunks)src/plugins/chat/public/components/chat_window.tsx(5 hunks)src/plugins/chat/public/components/graph_visualization/error_boundary.tsx(0 hunks)src/plugins/chat/public/components/graph_visualization/error_display.tsx(0 hunks)src/plugins/chat/public/components/graph_visualization/error_handler.ts(0 hunks)src/plugins/chat/public/components/graph_visualization/validation.ts(0 hunks)src/plugins/chat/public/plugin.test.ts(4 hunks)src/plugins/chat/public/plugin.ts(5 hunks)src/plugins/chat/public/services/chat_context_manager.test.ts(0 hunks)src/plugins/chat/public/services/chat_context_manager.ts(0 hunks)src/plugins/chat/public/services/chat_service.test.ts(16 hunks)src/plugins/chat/public/services/chat_service.ts(15 hunks)
💤 Files with no reviewable changes (6)
- src/plugins/chat/public/components/graph_visualization/validation.ts
- src/plugins/chat/public/services/chat_context_manager.ts
- src/plugins/chat/public/components/graph_visualization/error_handler.ts
- src/plugins/chat/public/components/graph_visualization/error_boundary.tsx
- src/plugins/chat/public/services/chat_context_manager.test.ts
- src/plugins/chat/public/components/graph_visualization/error_display.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
- src/core/public/chat/chat_service.test.ts
🧰 Additional context used
🧬 Code graph analysis (7)
src/plugins/chat/public/components/chat_header_button.tsx (1)
src/core/public/index.ts (1)
SIDECAR_DOCKED_MODE(229-229)
src/core/public/chat/chat_service.mock.ts (1)
src/core/public/chat/types.ts (2)
ChatServiceSetup(170-190)ChatServiceStart(195-203)
src/plugins/chat/public/components/chat_window.tsx (2)
src/core/public/chat/types.ts (1)
Message(82-87)src/plugins/chat/common/types.ts (1)
Message(12-12)
src/plugins/chat/public/plugin.ts (4)
src/core/public/index.ts (2)
CoreSetup(262-298)CoreStart(321-358)src/core/public/chat/chat_service.ts (1)
ChatService(19-169)src/plugins/chat/public/services/chat_service.ts (1)
ChatService(36-510)src/core/public/chat/index.ts (1)
ChatService(23-23)
src/plugins/chat/public/plugin.test.ts (2)
src/core/public/chat/chat_service.ts (1)
ChatService(19-169)src/plugins/chat/public/plugin.ts (1)
ChatPlugin(41-192)
src/core/public/chat/chat_service.ts (1)
src/core/public/chat/types.ts (5)
ChatServiceSetup(170-190)ChatServiceStart(195-203)ChatImplementationFunctions(149-165)ChatWindowState(97-101)Message(82-87)
src/plugins/chat/public/services/chat_service.test.ts (2)
src/core/public/chat/chat_service.ts (1)
ChatService(19-169)src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (68)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Lint and validate
- GitHub Check: lighthouse
- GitHub Check: WhiteSource Security Check
🔇 Additional comments (8)
src/plugins/chat/public/components/chat_window.tsx (2)
67-83: Good use of ref pattern to stabilize timeline access in memoized callback.The
timelineRefpattern correctly avoids stale closure issues by providing access to the latesttimelinevalue inside the memoizedeventHandlerwithout forcing re-creation on every timeline change.
31-34: LGTM!The
ChatWindowInstanceinterface correctly exposessendMessagealongsidestartNewChat, enabling external callers to programmatically send messages through the chat window ref.src/core/public/chat/types.ts (1)
1-93: Well-structured message type system.The discriminated union pattern for
Messagetypes with role-based discrimination is a solid design. TheRoletype correctly enumerates all valid roles. This provides good type safety for message handling throughout the chat system.src/plugins/chat/public/components/chat_header_button.tsx (2)
153-170: LGTM!Using
chatService.isWindowOpen()instead of the localisOpenstate in the window open/close request handlers ensures consistency with the authoritative state source. The dependency array correctly reflects the actual dependencies used in the callbacks.
193-198: LGTM!The availability check using
core.chat.isAvailable()correctly gates the entire chat UI when the chat service is unavailable, aligning with the core-driven enablement model described in the PR objectives.src/plugins/chat/public/plugin.test.ts (3)
41-45: LGTM!Adding the
capabilitiesmock withagenticFeaturesEnabled: trueproperly enables the chat feature in tests, aligning with the unified enablement model where the core service drives feature availability decisions.
93-95: LGTM!The updated assertion correctly verifies that
ChatServiceis constructed withuiSettingsandchatfrom the core start contract, aligning with the new constructor signature that injects core dependencies.
180-189: LGTM!The test correctly verifies that
ChatServiceis always initialized regardless of configuration, with the core service handling enablement decisions. Removing the unused index parameter is a good cleanup.
| /** | ||
| * Get workspace-aware data source ID | ||
| * Determines the correct data source based on current workspace context | ||
| */ | ||
| private async getWorkspaceAwareDataSourceId(): Promise<string | undefined> { | ||
| try { | ||
| if (!this.uiSettings) { | ||
| // eslint-disable-next-line no-console | ||
| console.warn('UI Settings not available, using default data source'); | ||
| return undefined; | ||
| } | ||
|
|
||
| // Get workspace context | ||
| const workspaces = getWorkspaces(); | ||
| if (!workspaces) { | ||
| // eslint-disable-next-line no-console | ||
| console.warn('Workspaces service not available, using global scope'); | ||
| return undefined; | ||
| } | ||
|
|
||
| const currentWorkspaceId = workspaces.currentWorkspaceId$.getValue(); | ||
|
|
||
| // Determine scope based on workspace context | ||
| const scope: UiSettingScope = !!currentWorkspaceId | ||
| ? UiSettingScope.WORKSPACE | ||
| : UiSettingScope.GLOBAL; | ||
|
|
||
| // Get default data source with proper scope | ||
| const dataSourceId = await getDefaultDataSourceId(this.uiSettings, scope); | ||
|
|
||
| return dataSourceId || undefined; | ||
| } catch (error) { | ||
| // eslint-disable-next-line no-console | ||
| console.warn('Failed to determine workspace-aware data source, proceeding without:', error); | ||
| return undefined; // Graceful fallback - undefined means local cluster | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getWorkspaceAwareDataSourceId skips global default when workspaces are unavailable
In the !workspaces branch you log:
console.warn('Workspaces service not available, using global scope');
return undefined;However, returning undefined bypasses getDefaultDataSourceId entirely, so in non-workspace environments you effectively ignore any configured global default data source and always fall back to the local cluster. That’s different from the workspace-enabled path, where the global default is honored via UiSettingScope.GLOBAL.
To keep behavior consistent (and match the log message), consider:
const workspaces = getWorkspaces();
if (!workspaces) {
// eslint-disable-next-line no-console
console.warn('Workspaces service not available, using global scope');
const dataSourceId = await getDefaultDataSourceId(this.uiSettings, UiSettingScope.GLOBAL);
return dataSourceId || undefined;
}This way, workspace-less deployments still respect the configured global default data source.
🤖 Prompt for AI Agents
In src/plugins/chat/public/services/chat_service.ts around lines 258 to 294, the
branch handling !workspaces returns undefined which skips calling
getDefaultDataSourceId and therefore ignores any configured GLOBAL default;
instead, call getDefaultDataSourceId(this.uiSettings, UiSettingScope.GLOBAL) in
that branch, return its result (or undefined if falsy), and keep the
console.warn message so non-workspace deployments still honor the global default
data source.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (2)
9-47: Consider reusing the core chat service start mock instead of hand‑rolledjest.Mocked<ChatServiceStart>The manual
mockChatServiceshape looks consistent with the currentChatServiceStartsurface, but it will need to be kept in sync as the core chat API evolves. Since this PR adds a dedicated core chat mock module (src/core/public/chat/chat_service.mock.ts), it would be more maintainable to construct the mock from that shared helper and only override the behaviors you care about in this test (e.g.,sendMessageWithWindow,isWindowOpen).This reduces duplication and the risk of missing new methods in future refactors.
172-220: Double‑check the semantics of the second argument tosendMessageWithWindowThe updated expectations now assert that
sendMessageWithWindowis always called with an empty array as the second argument:
- Line 189–192:
'What is this error?', []- Line 215–218:
'Follow-up question', []- Line 265:
'Test question', []If that second parameter is intended to carry tool results, context payload, or other metadata in the new core chat API, enforcing
[]here might be too strict and could mask missing context fromAskAIActionItem. Conversely, if this component is intentionally not providing any additional payload, you might want to either:
- keep the assertion but add a short comment clarifying that
[]is the expected contract for this call site, or- relax the assertion to only care about the message (e.g.,
toHaveBeenCalledWith('What is this error?', expect.any(Array))orexpect.anything()), so tests don’t over‑couple to how the second argument is currently used.Please confirm that
[]is the correct, long‑term behavior for this component with the newChatServiceStartsignature.Also applies to: 265-265
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snapis excluded by!**/*.snap
📒 Files selected for processing (2)
src/core/public/chat/chat_service.test.ts(1 hunks)src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx(7 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/core/public/chat/chat_service.test.ts
🧰 Additional context used
🧬 Code graph analysis (1)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (2)
src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)src/core/public/index.ts (1)
ChatServiceStart(440-440)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (68)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: lighthouse
- GitHub Check: bundle-analyzer
- GitHub Check: WhiteSource Security Check
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
src/plugins/chat/public/services/chat_service.ts (1)
265-301:getWorkspaceAwareDataSourceIdstill bypasses global default when workspaces unavailable.This issue was flagged in a previous review. When
!workspaces(lines 279-283), the code returnsundefinedwithout callinggetDefaultDataSourceIdwithUiSettingScope.GLOBAL. This means non-workspace deployments won't respect the configured global default data source.Consider calling
getDefaultDataSourceIdwith global scope when workspaces are unavailable:const workspaces = this.workspaces; if (!workspaces) { // eslint-disable-next-line no-console console.warn('Workspaces service not available, using global scope'); - return undefined; + const dataSourceId = await getDefaultDataSourceId(this.uiSettings, UiSettingScope.GLOBAL); + return dataSourceId || undefined; }
🧹 Nitpick comments (2)
src/plugins/chat/public/plugin.ts (1)
114-129: Consider null-safe optional chaining forthis.chatService.The code uses
this.chatService.sendMessage.bind(this.chatService)after the!isEnabledearly return, sothis.chatServiceis guaranteed to be defined at this point. However, usingthis.chatService!would make this explicit to readers and align with usage on lines 141 and 177.// Register implementation functions with core chat service if (this.coreSetup?.chat?.setImplementation) { this.coreSetup.chat.setImplementation({ // Only business logic operations - sendMessage: this.chatService.sendMessage.bind(this.chatService), - sendMessageWithWindow: this.chatService.sendMessageWithWindow.bind(this.chatService), - openWindow: this.chatService.openWindow.bind(this.chatService), - closeWindow: this.chatService.closeWindow.bind(this.chatService), + sendMessage: this.chatService!.sendMessage.bind(this.chatService!), + sendMessageWithWindow: this.chatService!.sendMessageWithWindow.bind(this.chatService!), + openWindow: this.chatService!.openWindow.bind(this.chatService!), + closeWindow: this.chatService!.closeWindow.bind(this.chatService!), }); }src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (1)
9-9: Mock now correctly targets coreChatServiceStart; consider reusing shared mock helperThe switch to importing
ChatServiceStartfromcore/publicand typingmockChatServiceasjest.Mocked<ChatServiceStart>with the expanded method surface (sendMessageWithWindow, window state APIs,suggestedActionsService) looks consistent with the new core chat service contract.To reduce duplication and keep this mock in sync with future API changes, you might consider constructing it via the new core chat mock helper (e.g., from
src/core/public/chat/chat_service.mock.ts) instead of hand-rolling the object here.Also applies to: 26-26, 35-47
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snapis excluded by!**/*.snap
📒 Files selected for processing (5)
src/core/public/chat/chat_service.test.ts(1 hunks)src/plugins/chat/public/plugin.test.ts(5 hunks)src/plugins/chat/public/plugin.ts(5 hunks)src/plugins/chat/public/services/chat_service.ts(15 hunks)src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx(7 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/core/public/chat/chat_service.test.ts
🧰 Additional context used
🧬 Code graph analysis (3)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (1)
src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)
src/plugins/chat/public/plugin.test.ts (2)
src/core/public/chat/chat_service.ts (1)
ChatService(19-169)src/plugins/chat/public/plugin.ts (1)
ChatPlugin(41-192)
src/plugins/chat/public/services/chat_service.ts (4)
src/core/public/index.ts (5)
IUiSettingsClient(399-399)ChatServiceStart(440-440)WorkspacesStart(421-421)ChatWindowState(443-443)UiSettingScope(142-142)src/core/public/chat/types.ts (2)
ChatServiceStart(195-203)ChatWindowState(97-101)src/core/public/chat/index.ts (2)
ChatServiceStart(9-9)ChatWindowState(20-20)src/plugins/data_source_management/public/index.ts (1)
getDefaultDataSourceId(29-29)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (68)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: WhiteSource Security Check
- GitHub Check: lighthouse
- GitHub Check: bundle-analyzer
🔇 Additional comments (15)
src/plugins/chat/public/plugin.test.ts (4)
41-62: Mock setup correctly includes new core services.The mock setup properly adds
capabilities.investigation.agenticFeaturesEnabled,uiSettings,chat, andworkspacesto align with the refactored ChatService constructor and enablement flow. Using empty objects for these mocks is acceptable for unit tests that only verify constructor call arguments.
96-101: Constructor expectation correctly updated.The test now verifies that
ChatServiceis instantiated with the three core dependencies (uiSettings,chat,workspaces) frommockCoreStart, matching the new constructor signature.
137-147: Test description accurately reflects new enablement semantics.The updated test description "should always initialize chat service (core service handles enablement)" correctly documents that the plugin always initializes ChatService and defers enablement decisions to the core service.
195-208: Configuration handling test updated for core-driven enablement.The loop correctly tests various configuration formats and verifies that
ChatServiceis always instantiated with the three core dependencies, regardless of the config values. The comment on line 202 accurately explains that enablement logic is delegated to the core service.src/plugins/chat/public/plugin.ts (3)
12-24: Imports correctly updated for core integration.The new imports properly bring in
CoreSetup,ChatWindowStatefrom core, andisChatEnabledfrom the common capabilities module to support the refactored architecture.
84-91: Setup method signature updated for core integration.The
setupmethod now acceptsCoreSetupand stores the reference for later use instart(). This follows the OpenSearch Dashboards plugin lifecycle pattern where setup captures references needed during start.
93-112: Unified enablement check with graceful fallback.The enablement logic using
isChatEnabled()centralizes the decision. Note thatChatServiceis always instantiated on line 106 (before the enablement check), but the return contract correctly returnschatService: undefinedwhen disabled. This ensures internal state is consistent even when chat is disabled.src/plugins/chat/public/services/chat_service.ts (5)
54-72: Constructor properly initializes dependencies and restores state.The constructor correctly stores the three dependencies and conditionally restores thread ID from session storage only when
coreChatServiceis available. This prevents errors during initialization when the core service is not provided.
148-177: Change tracking inonWindowStateChangeis well-implemented.The implementation correctly:
- Skips the initial state to avoid spurious callbacks
- Compares previous vs new state to determine what changed
- Only notifies when something actually changed
- Properly unsubscribes on cleanup
This is a clean pattern for observing state changes with change metadata.
488-502: Guard clause improvement inclearDynamicContextFromStore.Good refactor using early return pattern instead of nested conditionals. This improves readability.
504-516:newThreadcorrectly delegates to core service.The method properly delegates thread creation to
coreChatService, clears local messages, removes session storage, and clears dynamic context. The error thrown whencoreChatServiceis unavailable maintains consistency with other methods.
74-86: Throwing on missing core service may cause runtime issues.These methods throw
Error('Core chat service not available')whencoreChatServiceis undefined. While this enforces the dependency contract, callers (UI components, other services) must properly handle these exceptions. Verify that all callers either:
- Are only invoked when chat is enabled (and thus
coreChatServiceis available), or- Have proper try/catch error handling
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (3)
172-194: Execution test asserts the updatedsendMessageWithWindowcontract correctlyThe “should send message with sendMessageWithWindow” test now verifies the two-argument call (
message,[]), which matches the updated payload contract and gives good coverage that the component isn’t leaking any extra context through this path.
196-220: Good coverage for behavior when chat window is already openThe new “should send message regardless of chat window state” test correctly stubs
isWindowOpentotrueand still asserts asendMessageWithWindow(message, [])call, guarding against regressions where an open window might inadvertently short-circuit sending.
248-267: Trim test validates outbound message normalization against the new APIThe whitespace-trimming test now asserts
sendMessageWithWindow('Test question', []), which both validates input normalization and confirms the component uses the new empty-payload shape consistently with other execution tests.
src/plugins/chat/public/types.ts
Outdated
| navigation: NavigationPublicPluginStart; | ||
| contextProvider: ContextProviderStart; | ||
| charts: ChartsPluginStart; | ||
| dataSourceManagement?: DataSourceManagementPluginSetup; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: Seems we don't rely on the dataSourceManagement plugin for now, can we remove it from the dependencies and the opensearch_dashboards.json. I'm open to do this in the future PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes will completely clean it out
| return this.windowState$.asObservable(); | ||
| }, | ||
|
|
||
| setWindowState, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shall we hide this interface? I am thinking exposing this method may give too much details of the module.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice comment. Do you think I can work this as a follow up? windowState is mainly UI related like paddingSize, open and mode. The current pattern is like direct expose, similar to other plugins.
// Core exposes setter
core.workspaces.setClient(client)
// Plugin uses it
this.coreStart.workspaces.setClient(myClient);
We can unify the pattern later in the follow-up?
Signed-off-by: Anan Zhuang <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
src/plugins/chat/public/services/chat_service.ts (1)
279-283: !workspaces branch bypasses global default data source.The
!workspacesbranch (Lines 279-283) logs "using global scope" but returnsundefinedwithout callinggetDefaultDataSourceId. This means non-workspace deployments ignore any configured global default data source and always fall back to the local cluster, which is inconsistent with the workspace-enabled path (Lines 285-295).This issue was previously flagged in a past review comment.
Apply this diff to honor global defaults in non-workspace deployments:
const workspaces = this.workspaces; if (!workspaces) { // eslint-disable-next-line no-console console.warn('Workspaces service not available, using global scope'); - return undefined; + const dataSourceId = await getDefaultDataSourceId(this.uiSettings, UiSettingScope.GLOBAL); + return dataSourceId || undefined; }
🧹 Nitpick comments (5)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (2)
9-9: Prefer using the sharedcoreChatServiceMockinstead of a hand-rolled mockYou’re manually mirroring the
ChatServiceStartsurface here; this will drift as the core chat API evolves and doesn’t provide realistic return values (e.g., observables fromgetThreadId$/getWindowState$). Consider switching to the central mock (e.g.,coreChatServiceMock.createStartContract()fromsrc/core/public/chat/chat_service.mock.ts) and then overriding only the behaviours this test cares about (isAvailable,isWindowOpen,sendMessageWithWindow, etc.). This will keep tests aligned with the core contract and reduce future maintenance.Also applies to: 26-47
171-195: Verify that log context is still included in the chat message flow and add/assert tests accordinglyThese tests now assert that
sendMessageWithWindowis called with the user question and an empty array ([]). Given this component is “Ask AI” for a log entry and the success message still says “with log context”, please double‑check that:
- The log context (document ID, index, message, etc.) is still being forwarded somewhere in the new architecture (e.g., via the plugin service or tools), and
- If so, that behaviour is covered by tests (either here or in a more appropriate layer), ideally by asserting the structured payload rather than just
[].If the context is intentionally no longer passed from this component, it might be worth updating the success copy and/or adding explicit tests at the new integration point to avoid a silent regression in log-aware AI responses.
Also applies to: 196-221, 248-267
src/plugins/chat/public/plugin.ts (2)
94-112: Consider deferring ChatService initialization when disabled.The comment states "core service handles enablement," but the code still creates a ChatService instance even when
!isEnabled(Line 106), only to returnundefinedin the start contract (Line 110). This creates an unused service instance and wastes resources.Consider either:
- Moving the ChatService instantiation inside the
isEnabledblock if it's truly disabled- Returning the chatService instance even when disabled if the core service should manage all enablement logic
The current approach is inconsistent with both patterns.
141-141: Non-null assertions are safe but fragile.The
this.chatService!assertions (Lines 141, 177) are safe because they're within theisEnabledblock where chatService is guaranteed to be defined. However, this pattern is fragile—if the control flow changes, runtime errors could occur.Consider storing chatService in a local variable after initialization to make the type narrowing explicit:
// Always initialize chat service - core service handles enablement this.chatService = new ChatService(core.uiSettings, core.chat, core.workspaces); if (!isEnabled) { return { chatService: undefined, }; } +const chatService = this.chatService; // Type is now narrowed to non-undefined // Register implementation functions with core chat service if (this.coreSetup?.chat?.setImplementation) { this.coreSetup.chat.setImplementation({ // Only business logic operations - sendMessage: this.chatService.sendMessage.bind(this.chatService), + sendMessage: chatService.sendMessage.bind(chatService), // ... etc }); }Also applies to: 177-177
src/plugins/chat/public/services/chat_service.ts (1)
74-86: Optional constructor parameter but required in methods.The constructor accepts
coreChatService?: ChatServiceStartas optional (Line 56), butgetThreadId()andgetThreadId$()throw if it's unavailable (Lines 75-77, 82-84). This creates a mismatch:
- If the service is optional at construction, methods should handle its absence gracefully
- If it's required for operation, consider making it a required constructor parameter
The current pattern will lead to runtime errors if ChatService is constructed without the core service but these methods are called.
Consider either:
- Making
coreChatServicerequired in the constructor- Returning a default value or throwing a more specific error during construction if it's missing
- Handling the undefined case gracefully in these methods (e.g., returning a default threadId or a BehaviorSubject with a default value)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snapis excluded by!**/*.snap
📒 Files selected for processing (6)
src/core/public/chat/chat_service.test.ts(1 hunks)src/plugins/chat/opensearch_dashboards.json(1 hunks)src/plugins/chat/public/plugin.test.ts(5 hunks)src/plugins/chat/public/plugin.ts(5 hunks)src/plugins/chat/public/services/chat_service.ts(15 hunks)src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx(7 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- src/plugins/chat/opensearch_dashboards.json
- src/core/public/chat/chat_service.test.ts
🧰 Additional context used
🧬 Code graph analysis (4)
src/plugins/chat/public/plugin.test.ts (2)
src/plugins/chat/public/services/chat_service.ts (1)
ChatService(37-517)src/plugins/chat/public/plugin.ts (1)
ChatPlugin(41-192)
src/plugins/explore/public/components/ask_ai_action_item/ask_ai_action_item.test.tsx (3)
src/core/public/chat/types.ts (1)
ChatServiceStart(195-203)src/core/public/chat/index.ts (1)
ChatServiceStart(9-9)src/core/public/index.ts (1)
ChatServiceStart(440-440)
src/plugins/chat/public/plugin.ts (4)
src/core/public/index.ts (2)
CoreSetup(262-298)CoreStart(321-358)src/plugins/chat/public/types.ts (3)
ChatPluginSetup(12-14)AppPluginStartDependencies(20-24)ChatPluginStart(16-18)src/plugins/chat/public/services/chat_service.ts (1)
ChatService(37-517)src/core/public/chat/chat_service.ts (1)
ChatService(19-169)
src/plugins/chat/public/services/chat_service.ts (5)
src/core/public/index.ts (5)
IUiSettingsClient(399-399)ChatServiceStart(440-440)WorkspacesStart(421-421)Message(442-442)ChatWindowState(443-443)src/core/public/chat/types.ts (3)
ChatServiceStart(195-203)Message(82-87)ChatWindowState(97-101)src/core/public/chat/index.ts (3)
ChatServiceStart(9-9)Message(11-11)ChatWindowState(20-20)src/plugins/chat/public/services/ag_ui_agent.ts (1)
AgUiAgent(22-142)src/plugins/data_source_management/public/index.ts (1)
getDefaultDataSourceId(29-29)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (990)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run cypress tests (osd:ciGroup7)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup10Fast)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup9)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup10Slow)
- GitHub Check: Run cypress tests (osd:ciGroup1)
- GitHub Check: Run cypress tests (osd:ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup6)
- GitHub Check: Run cypress tests (osd:ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup2)
- GitHub Check: Run cypress tests (osd:ciGroup3)
- GitHub Check: Run cypress tests (osd:ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup1)
- GitHub Check: bundle-analyzer
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: lighthouse
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run functional tests on Linux (ciGroup7)
- GitHub Check: Run functional tests on Linux (ciGroup3)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup4)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup1)
- GitHub Check: Run functional tests on Linux (ciGroup2)
- GitHub Check: Run plugin functional tests on Windows
- GitHub Check: Build min release artifacts on Windows x64
- GitHub Check: Run plugin functional tests on Linux
- GitHub Check: Build min release artifacts on macOS ARM64
- GitHub Check: Build min release artifacts on macOS x64
- GitHub Check: Build min release artifacts on Linux ARM64
- GitHub Check: Build min release artifacts on Linux x64
- GitHub Check: Build and Verify on Windows (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup4)
- GitHub Check: Build and Verify on Windows (ciGroup1)
- GitHub Check: Build and Verify on Windows (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup2)
- GitHub Check: Build and Verify on Linux (ciGroup3)
- GitHub Check: Build and Verify on Linux (ciGroup1)
- GitHub Check: Lint and validate
- GitHub Check: Run cypress tests (osd:ciGroup14)
- GitHub Check: Run cypress tests (osd:ciGroup17Explore)
- GitHub Check: Run functional tests on Windows (ciGroup3)
- GitHub Check: Run functional tests on Windows (ciGroup11)
- GitHub Check: Run cypress tests (osd:ciGroup16Explore)
- GitHub Check: Run cypress tests (osd:ciGroup12Explore)
- GitHub Check: Run cypress tests (osd:ciGroup15)
- GitHub Check: Run functional tests on Linux (ciGroup5)
- GitHub Check: Run cypress tests (osd:ciGroup10Explore)
- GitHub Check: Run functional tests on Windows (ciGroup7)
- GitHub Check: Run functional tests on Windows (ciGroup4)
- GitHub Check: Run cypress tests (osd:ciGroup14Explore)
- GitHub Check: Run functional tests on Windows (ciGroup12)
- GitHub Check: Run functional tests on Linux (ciGroup8)
- GitHub Check: Run cypress tests (osd:ciGroup15Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13Explore)
- GitHub Check: Run cypress tests (osd:ciGroup13)
- GitHub Check: Run functional tests on Linux (ciGroup9)
- GitHub Check: Run functional tests on Windows (ciGroup5)
- GitHub Check: Run functional tests on Windows (ciGroup8)
- GitHub Check: Run functional tests on Windows (ciGroup9)
- GitHub Check: Run functional tests on Linux (ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup6)
- GitHub Check: Run functional tests on Windows (ciGroup10)
- GitHub Check: Run functional tests on Windows (ciGroup2)
- GitHub Check: Run functional tests on Windows (ciGroup13)
- GitHub Check: Run functional tests on Windows (ciGroup6)
- GitHub Check: Run functional tests on Linux (ciGroup13)
- GitHub Check: Run cypress tests (osd:ciGroup11)
- GitHub Check: Run functional tests on Linux (ciGroup10)
- GitHub Check: Run functional tests on Linux (ciGroup12)
- GitHub Check: Run cypress tests (osd:ciGroup12)
Description
This PR refactors the chat plugin architecture by extracting shared infrastructure into a core chat service. This establishes a clean separation of concerns where the core manages state infrastructure and plugins provide business logic through delegation.
Key Changes
Architecture Refactoring
Infrastructure vs Business Logic Separation
Issues Resolved
NA
Screenshot
refactor-chat.mov
refactor-investigation.mov
Testing the changes
Changelog
Check List
yarn test:jestyarn test:jest_integrationSummary by CodeRabbit
New Features
Refactor
Tests
✏️ Tip: You can customize this high-level summary in your review settings.